package com.company.zhishidian.nio;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class TestChannel {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("pkg/src.txt");
        FileOutputStream fos = new FileOutputStream("pkg/srcCopy.txt");
        FileChannel fcin = fis.getChannel();   // 产生一个文件输入管道
        ByteBuffer buffer = ByteBuffer.allocate(8);   // 设置一个字节缓冲区
//        // 将文件中的内容读到了字节缓冲区
//        fcin.read(buffer);

        // 产生一个输出管道
        FileChannel fcout = fos.getChannel();

        // 将文件内容读到缓冲区
        while (fcin.read(buffer)!=-1){
            buffer.flip();
            fcout.write(buffer);
            buffer.clear();
        }



        System.out.println(new String(buffer.array()));
    }
}
class TestBuffer{
    public static void main(String[] args) {
        ByteBuffer buffer = ByteBuffer.allocate(100);
        pd(buffer);
        buffer.put("abcde".getBytes());
        pd(buffer);
        // 进行读写切换  可以让limit 变成当前的 position ，position 变成 0
//        buffer.flip();
        // 直接 position = 0 ,limit 不变 让其重复写
        buffer.rewind();
        pd(buffer);

    }
    public static void pd(ByteBuffer buffer){
        // Cappacity 最大容量 position 指针 limit 指针
        System.out.println("position="+buffer.position()+" limit="+buffer.limit()+" capacity="+buffer.capacity());
    }
}
